package 枚举类和注解.注解;

/**
 * @Projectname java_based
 * @Filename AnnotationTest
 * @Author an
 * @Data 2022/7/18 14:48
 * @Description TODO
 */
import java.util.ArrayList;
import java.util.Date;

    /**
     * 注解的使用
     *
     * 1. 理解Annotation:
     * ① jdk 5.0 新增的功能
     *
     * ② Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用 Annotation,
     *    程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。
     *
     * ③在JavaSE中，注解的使用目的比较简单，例如标记过时的功能，忽略警告等。在JavaEE/Android
     *  中注解占据了更重要的角色，例如用来配置应用程序的任何切面，代替JavaEE旧版中所遗留的繁冗
     *  代码和XML配置等。
     *
     * 2. Annocation的使用示例
     *  示例一：生成文档相关的注解
     *  示例二：在编译时进行格式检查(JDK内置的三个基本注解)
     *      @Override: 限定重写父类方法, 该注解只能用于方法
     *      @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
     *      @SuppressWarnings: 抑制编译器警告
     *
     *  示例三：跟踪代码依赖性，实现替代配置文件功能
     */
    public class AnnotationTest {
        public static void main(String[] args) {
            Person p = new Student();
            p.walk();

            Date date = new Date(2020, 10, 11);
            System.out.println(date);

            @SuppressWarnings("unused")
            int num = 10;

//        System.out.println(num);

            @SuppressWarnings({ "unused", "rawtypes" })
            ArrayList list = new ArrayList();
        }
    }

    class Person{
        private String name;
        private int age;

        public Person() {
            super();
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public void walk(){
            System.out.println("学习中……");
        }
        public void eat(){
            System.out.println("摸鱼中……");
        }
    }

    interface Info{
        void show();
    }

    class Student extends Person implements Info{

        @Override
        public void walk() {
            System.out.println("喷子走开");
        }

        @Override
        public void show() {

        }
    }
